﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using CondominioG1.Persistencia.NHibernate;
using CondominioG1.Dominio;

namespace CondominioG1.Pruebas.TestDAO
{
    [TestFixture]
    public class TestResidenteDAO
    {
        private ResidenteDAO ResidenteDAO = new ResidenteDAO();

        [Test]
        public void TestCrear()
        {
            // 1. Instanciando el objeto DAO a probar
            Residente nuevoResidente = new Residente();
            nuevoResidente.Dni = "40714336";
            nuevoResidente.Nombres = "Alvaro";
            nuevoResidente.Apellidos = "Cerna";
            nuevoResidente.Edad = 36;
            nuevoResidente.Correo = "acerna@dew.com";
            nuevoResidente.Clave= "1234";
            nuevoResidente.Tipo= "P";

            // 2. Llamada al método del DAO a probar
            Residente ResidenteCreado = ResidenteDAO.Crear(nuevoResidente);
            Assert.DoesNotThrow(delegate{
                ResidenteCreado = ResidenteDAO.Crear(nuevoResidente);
            });


            // 3. Implementar las validaciones
            Assert.NotNull(nuevoResidente);
            Assert.AreEqual(nuevoResidente.Nombres, ResidenteCreado.Nombres);
        }

        [Test]
        public void TestObtener()
        {
            // 1. Instanciamos el objeto TO
            String dni = "40714336";
            // 2. Llamada al método del DAO a probar
            Residente ResidenteObtenido = ResidenteDAO.Obtener(dni);
            // 3. Implementar las validaciones
            Assert.NotNull(ResidenteObtenido);
            Assert.AreEqual(dni, ResidenteObtenido.Dni);
            Assert.NotNull(ResidenteObtenido.Nombres);
        }

        [Test]
        public void TestModificar()
        {

            // 2. Instanciamos el objeto TO
            Residente ResidenteModificar = new Residente();
            ResidenteModificar.Dni = "40714336";
            ResidenteModificar.Nombres = "Alvaro";
            ResidenteModificar.Apellidos = "Cerna";
            ResidenteModificar.Edad = 36;
            ResidenteModificar.Correo = "acerna@hotmail.com";
            ResidenteModificar.Clave = "1234";
            ResidenteModificar.Tipo = "P";
            // 3. Llamada al método del DAO a probar
            Residente ResidenteObtenido = ResidenteDAO.Modificar(ResidenteModificar);
            // 4. Implementar las validaciones
            Assert.NotNull(ResidenteObtenido);
            Assert.AreEqual(ResidenteObtenido.Correo, ResidenteObtenido.Correo);

        }
        [Test]
        public void TestEliminar()
        {

            // 2. Instanciamos el objeto TO
            Residente ResidenteEliminar = new Residente();
            ResidenteEliminar.Dni = "40714336";
            // 3. Llamada al método del DAO a probar
            Assert.Catch<Exception>(delegate
            {
                ResidenteDAO.Eliminar(ResidenteEliminar);
            });
            Assert.DoesNotThrow(delegate
            {
                ResidenteDAO.Eliminar(ResidenteEliminar);
            });

            // 4. Implementar las validaciones
            Assert.NotNull(ResidenteEliminar);
            Assert.NotNull(ResidenteEliminar.Dni);
        }

        [Test]
        public void TestListarResidente()
        {
            //string tipo = "administrador";
            ICollection<Residente> LResidente = ResidenteDAO.ListaResidente();
            Assert.NotNull(LResidente);
            Assert.Greater(LResidente.Count, 1);
        }

        [Test]
        public void TestListarResidenteEmail()
        {
            string correo = "upc.edu.pe";
            ICollection<Residente> LTutor = ResidenteDAO.ListarResidentePorCorreo(correo);
            Assert.NotNull(LTutor);
            Assert.Greater(LTutor.Count, 0); 
        }

        [Test]
        public void TestObtenerResidentePorCorreo()
        {
            String correo = "u900176@upc.edu.pe";
            ICollection<Residente> LTutor = ResidenteDAO.ObtenerResidentePorCorreo(correo);
            Assert.NotNull(LTutor);
            Assert.AreEqual(LTutor.Count, 1); 
        }

        [Test]
        public void TestValidarCorreo()
        {
            String correo = "u900176@upc.edu.pe";
            Int32 res = ResidenteDAO.ValidarCorreo(correo);
            Assert.NotNull(res);
            Assert.AreEqual(res, 1);
        }
    }
}